//===============================================================================
// Let user to pick 2 points on a window to create a Line entity
//===============================================================================
//-----------------------------------------------
void CALLBACK EventCmdLine (int Prm, HANDLE hLcWnd)
{
double x0, y0, x1, y1;
if (Prm == 2){
x0 = lcPropGetFloat( hLcWnd, LC_PROP_WND_FLOAT0 );
y0 = lcPropGetFloat( hLcWnd, LC_PROP_WND_FLOAT1 );
x1 = lcPropGetFloat( hLcWnd, LC_PROP_WND_CURX );
y1 = lcPropGetFloat( hLcWnd, LC_PROP_WND_CURY );
lcPaint_DrawLine( hLcWnd, x0, y0, x1, y1 );
}
}
//-----------------------------------------------
void DemoWaitPoint_Line (HANDLE hLcWnd)
{
double X1, Y1, X2, Y2;
HANDLE hBlock;
// get a block, linked with CAD window
hBlock = lcPropGetHandle( hLcWnd, LC_PROP_WND_BLOCK );
for (;;){
if (lcWndWaitPoint2( hLcWnd, L"Pick first point", &X1, &Y1, EventCmdLine, 1 )){
lcPropPutFloat( hLcWnd, LC_PROP_WND_FLOAT0, X1 );
lcPropPutFloat( hLcWnd, LC_PROP_WND_FLOAT1, Y1 );
if (lcWndWaitPoint2( hLcWnd, L"Pick second point", &X2, &Y2, EventCmdLine, 2 )){
lcBlockAddLine( hBlock, X1, Y1, X2, Y2 );
lcWndRedraw( hLcWnd );
}else{
break; // exit cycle
}
}else{
break; // exit cycle
}
}
}
//===============================================================================
// Let user to pick 2 points on a window to create a Circle entity
//===============================================================================
//-----------------------------------------------
void CALLBACK EventCmdCirc (int Prm, HANDLE hLcWnd)
{
WCHAR szText[256];
double x0, y0, x1, y1, Rad;
HANDLE hPtbuf;
x1 = lcPropGetFloat( hLcWnd, LC_PROP_WND_CURX );
y1 = lcPropGetFloat( hLcWnd, LC_PROP_WND_CURY );
if (Prm == 1){
swprintf( szText, L"Center point %.2f, %.2f", x1, y1 );
lcCmdCursorText( hLcWnd, szText );
}else
if (Prm == 2){
x0 = lcPropGetFloat( hLcWnd, LC_PROP_WND_FLOAT0 );
y0 = lcPropGetFloat( hLcWnd, LC_PROP_WND_FLOAT1 );
lcPaint_DrawLine( hLcWnd, x0, y0, x1, y1 );
Rad = _hypot( x1-x0, y1-y0 );
hPtbuf = lcPaint_CreatePtbuf();
lcPaint_PtbufAddCircle( hPtbuf, x0, y0, Rad, 128 );
lcPaint_DrawPtbuf( hLcWnd, hPtbuf, true );
lcPaint_DeletePtbuf( hPtbuf );
swprintf( szText, L"Radius %.2f", Rad );
lcCmdCursorText( hLcWnd, szText );
}
}
//-----------------------------------------------
void DemoWaitPoint_Circ (HANDLE hLcWnd)
{
double X1, Y1, X2, Y2, Rad;
HANDLE hBlock;
// get a block, linked with CAD window
hBlock = lcPropGetHandle( hLcWnd, LC_PROP_WND_BLOCK );
for (;;){
if (lcWndWaitPoint2( hLcWnd, L"Center", &X1, &Y1, EventCmdCirc, 1 )){
lcPropPutFloat( hLcWnd, LC_PROP_WND_FLOAT0, X1 );
lcPropPutFloat( hLcWnd, LC_PROP_WND_FLOAT1, Y1 );
if (lcWndWaitPoint2( hLcWnd, L"Radius", &X2, &Y2, EventCmdCirc, 2 )){
Rad = _hypot( X2-X1, Y2-Y1 );
lcBlockAddCircle( hBlock, X1, Y1, Rad, false );
lcWndRedraw( hLcWnd );
}else{
break; // exit cycle
}
}else{
break; // exit cycle
}
}
}